#ifndef __TIMER_CONFIG_H__
#define __TIMER_CONFIG_H__
/**
注意:
    gd32常规定时器  总配置文件 一共14组timer
    高级定时器:  输出成对的pwm 死区时间 控制电机
        TIMER0  TIMER7
    通用定时器:  定时和输出单路pwm
        TIMER1  TIMER2   TIMER3   TIMER4   TIMER8  TIMER9  TIMER10 TIMER11  TIMER12  TIMER13
    基本定时器: 内部定时使用
        TIMER5 TIMER6
    高级和通用定时器的层级关系:
                        timer
                     ch0   ch1  ch2
                 gpioA   gpioB    gpioC
                同一个timer 预分频 设置频率 计数 都是一致的
                同一个通道   同时只能配置一个gipo输出  （高级定时除外 可以同时输出一组） 并且 占空比是duty 是相同的
    gd32和stm32不同点:
        gd32从timer0 开始一直到timer13
        stm32从timer1开始一直到timer14
    分频系数与频率设置配合使用:
        要求: 主频(240M)/(分频系数 * 频率) -1 <= 65535(16位计数器)
              分频系数 * 频率 >=3663
        例:  分频系数:1     频率 4000
                     2          2000
                    100         400
                    ...         ...
    定时器输出模式:
        TIMER_OC_MODE_PWM0：PWM模式0。
            这是一种PWM（脉宽调制）模式。当计数器值小于比较值时，输出引脚为有效状态；否则为无效状态。
        TIMER_OC_MODE_PWM1：PWM模式1。
            这是另一种PWM模式。当计数器值小于比较值时，输出引脚为无效状态；否则为有效状态。
    全局倍频操作：
         rcu_timer_clock_prescaler_config(RCU_TIMER_PSC_MUL4);
        不同定时器 主线频率不一样 统一4倍频 方便操作
        如果配置的倍数超过主频 还是主频 所以4倍频设置固定写

    EIT: 是定时器的一个输入通道，用于接收外部信号  "目前没有涉及到"
        外部时钟模式：
            定时器可以使用 ETI 作为时钟源，替代内部时钟。
            例如，通过外部信号触发定时器的计数。
        外部触发模式：
            定时器可以通过 ETI 接收外部信号，触发特定操作（如启动、停止、复位等）。
        捕获外部事件：
            定时器可以通过 ETI 捕获外部信号的上升沿或下降沿，用于测量脉冲宽度或频率。

    高级定时器的极性问题:
        "负极参数名中 都带 N 容易出错"
        输出模式都配置为 TIMER_OC_MODE_PWM0    代表到达计数器值之前 都为有效电平
         "正极在达到计数器值之前 为有效电平  负极在达到计数器之后为有效电平"

        正极配置为: TIMER_OC_POLARITY_HIGH  负极配置为: TIMER_OCN_POLARITY_HIGH
            正极: TIMER_OC_POLARITY_HIGH 代表有效电平为 高电平 所以到达计数器值之前 为高电平  之后为低电平
            负极: TIMER_OC_POLARITY_HIGH 代表有效电平为 高电平 所以到达计数器值之前 为低电平  之后为高电平
            结论: 波形正好互补
        正极配置为: TIMER_OC_POLARITY_LOW  负极配置为: TIMER_OCN_POLARITY_LOW
            正极: TIMER_OC_POLARITY_LOW  代表有效电平为 低电平 所以到达计数器值之前 为低电平  之后为高电平
            负极: TIMER_OCN_POLARITY_LOW 代表有效电平为 低电平 所以到达计数器值之前 为高电平  之后为低电平
            结论: 波形正好互补

        正极配置为: TIMER_OC_POLARITY_LOW  负极配置为: TIMER_OCN_POLARITY_HIGH
            正极: TIMER_OC_POLARITY_LOW   代表有效电平为 低电平 所以到达计数器值之前 为低电平  之后为高电平
            负极: TIMER_OCN_POLARITY_HIGH 代表有效电平为 高电平 所以到达计数器值之前 为低电平  之后为高电平
            结论: 波形一致

        正极配置为: TIMER_OC_POLARITY_HIGH  负极配置为: TIMER_OCN_POLARITY_LOW
            正极: TIMER_OC_POLARITY_HIGH   代表有效电平为 高电平 所以到达计数器值之前 为高电平  之后为低电平
            负极: TIMER_OCN_POLARITY_LOW   代表有效电平为 低电平 所以到达计数器值之前 为高电平  之后为低电平
            结论: 波形一致
    高级定时器的死区时间:
        H桥电路:
                +Vcc           +Vcc             注意: Q1 2 3 4 都是 NPN型三极管 高电平导通
              Q1│               │Q2                   Q1 Q3接pwm正极  Q2 Q4 接pwm负极
                │               │                     Q1 Q3 为高电平时 导通 正转
                │     电机      │                     Q2 Q4 为高电平时 导通 反转
                │—————————————— │                     使用死区时间 就是为了避免 Q1 Q4同时为高电平 导通 破坏电路
                │               │
              Q4│               │Q3
               GND              GND
    高级定时器的刹车功能:
        检测BRKIN 引脚 为高电平 停止 pwm输出 恢复低电平重新输入 这个过程是自动的
        "刹车功能 没有测试成功"

**/

/*** ----------------通用定时器 timer 1 2 3 4 8 9 10 11 12 13--------------*/
// 通用定时器需要注意 不同定时器  主频 通道 引脚 都不同 需要查表
#define USE_TIMER1 0
#define USE_TIMER2 0

/*****timer2 start*******/
#if USE_TIMER2
//基础参数配置
#define TIMER2_PSC          (1-1)        // 预分频系数
#define TIMER2_PERIOD       (SystemCoreClock / 4000 - 1)     //周期计数
#define TIMER2_AF           GPIO_AF_2 // 复用类型
#endif
/*****timer2 end********/


/*** ----------------高级定时器 timer 0 7----------------------------------*/
#define USE_TIMER0 0
#define USE_TIMER7 0

#if USE_TIMER0
#define TIMER0_PSC (10 - 1)                          // 预分频配置
#define TIMER0_PERIOD (SystemCoreClock / 10000 - 1) // 频率 周期 计数
#define TIMER0_AF GPIO_AF_1                         // 复用功能
#endif


/*** ----------------基本定时器 timer 5 6----------------------------------*/
#define USE_TIMER5 0
#define USE_TIMER6 0
/*****timer5 start*******/
#if USE_TIMER5
#define TIMER5_PSC       (100 - 1)                         // 预分频系数
#define TIMER5_PERIOD    (SystemCoreClock / 100 - 1)       //频率
#define TIMER5_NVIC_PRE_PRIORITY 2  //抢占优先级
#define TIMER5_NVIC_SUB_PRIORITY 2  //响应优先级
#endif
/*****timer6 start*******/
#if USE_TIMER6
#define TIMER6_PSC       (100 - 1)       									// 预分频系数
#define TIMER6_PERIOD    (SystemCoreClock / 100 - 1)      //频率
#define TIMER6_NVIC_PRE_PRIORITY 2  //抢占优先级
#define TIMER6_NVIC_SUB_PRIORITY 2  //响应优先级
#endif
#endif
